package cn.tedu.csmall.server.schedule; 
 /*
 @Time: 2022/10/30 18:52
 @Author:GShuai
 @File:CacheSchedule.class
 @Software:IntelliJ IDEA
*/

import cn.tedu.csmall.server.mapper.BrandMapper;
import cn.tedu.csmall.server.pojo.vo.BrandListItemVO;
import cn.tedu.csmall.server.repo.IBrandRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 计划任务类
 * 后缀 Schedule/Task
 */
@Slf4j
@Component

public class CacheSchedule {

    @Autowired
    private BrandMapper brandMapper;

    @Autowired
    private IBrandRepository brandRepository;
    public CacheSchedule() {
        log.debug("创建计划任务 对象：CacheSchedule");
    }
    /**
     * 计划任务
     * 只有添加了@Scheduled注解的方法，才是计划任务的方法，方法需要在组件中
     *
     * 1@Scheduled注解必须配置参数，表示何时/多久执行计划任务
     *
     * 当配置cron属性时，取值是以空格分割的6~7个值，其中，最后一个值表示“年”，其他个位置从左至右表示： 秒 分 时 日 月 周
     *                                                                                         10 1 *  ?   *  ?
     *  56 23 18  ? * MON “表示”每个月的周一（无视是几号）的18:23:56将执行此任务
     */

    @Scheduled(fixedRate =1 * 60 * 1000)  // 间隔5秒执行一次
//    @Scheduled(cron = "10 1 * ? * ?")
    public void updateCache(){
        log.debug("执行计划任务，更新缓存中的品牌列表......");
        // 将Redis中数据清除
        brandRepository.deleteList();
        // 从Mysql中读取品牌列表
        List<BrandListItemVO> brands= brandMapper.list();
        // 将品牌列表
        brandRepository.putList(brands);
    }

}
